home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickTime / QuickTime 3 Interfaces & Libs / QTDevMac / CIncludes / QD3DIO.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-21  |  23.9 KB  |  816 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DIO.h
  3.  
  4.      Contains:    QuickDraw 3D IO API                                                
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    QuickTime 3.0
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __QD3DIO__
  19. #define __QD3DIO__
  20.  
  21. #ifndef __QD3D__
  22. #include <QD3D.h>
  23. #endif
  24.  
  25. #ifndef __QD3DDRAWCONTEXT__
  26. #include <QD3DDrawContext.h>
  27. #endif
  28. #ifndef __QD3DVIEW__
  29. #include <QD3DView.h>
  30. #endif
  31.  
  32.  
  33.  
  34. #if PRAGMA_ONCE
  35. #pragma once
  36. #endif
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41.  
  42. #if PRAGMA_IMPORT
  43. #pragma import on
  44. #endif
  45.  
  46. #if PRAGMA_STRUCT_ALIGN
  47.     #pragma options align=power
  48. #elif PRAGMA_STRUCT_PACKPUSH
  49.     #pragma pack(push, 2)
  50. #elif PRAGMA_STRUCT_PACK
  51.     #pragma pack(2)
  52. #endif
  53.  
  54. #if PRAGMA_ENUM_ALWAYSINT
  55.     #pragma enumsalwaysint on
  56. #elif PRAGMA_ENUM_OPTIONS
  57.     #pragma option enum=int
  58. #elif PRAGMA_ENUM_PACK
  59.     #if __option(pack_enums)
  60.         #define PRAGMA_ENUM_PACK__QD3DIO__
  61.     #endif
  62.     #pragma options(!pack_enums)
  63. #endif
  64.  
  65. /******************************************************************************
  66.  **                                                                              **
  67.  **                                    Basic Types                                 **                                                    
  68.  **                                                                              **
  69.  *****************************************************************************/
  70. typedef unsigned char                     TQ3Uns8;
  71. typedef signed char                     TQ3Int8;
  72. typedef unsigned short                     TQ3Uns16;
  73. typedef signed short                     TQ3Int16;
  74. typedef unsigned long                     TQ3Uns32;
  75. typedef signed long                     TQ3Int32;
  76. #if TARGET_RT_BIG_ENDIAN
  77.  
  78. struct TQ3Uns64 {
  79.     unsigned long                     hi;
  80.     unsigned long                     lo;
  81. };
  82. typedef struct TQ3Uns64                    TQ3Uns64;
  83.  
  84. struct TQ3Int64 {
  85.     signed long                     hi;
  86.     unsigned long                     lo;
  87. };
  88. typedef struct TQ3Int64                    TQ3Int64;
  89. #else
  90.  
  91. struct TQ3Uns64 {
  92.     unsigned long                     lo;
  93.     unsigned long                     hi;
  94. };
  95. typedef struct TQ3Uns64                    TQ3Uns64;
  96.  
  97. struct TQ3Int64 {
  98.     unsigned long                     lo;
  99.     signed long                     hi;
  100. };
  101. typedef struct TQ3Int64                    TQ3Int64;
  102. #endif  /* TARGET_RT_BIG_ENDIAN */
  103.  
  104.  
  105. typedef float                             TQ3Float32;
  106. typedef double                             TQ3Float64;
  107. typedef TQ3Uns32                         TQ3Size;
  108. /******************************************************************************
  109.  **                                                                              **
  110.  **                                    File Types                                 **
  111.  **                                                                              **
  112.  *****************************************************************************/
  113.  
  114. enum TQ3FileModeMasks {
  115.     kQ3FileModeNormal            = 0,
  116.     kQ3FileModeStream            = 1 << 0,
  117.     kQ3FileModeDatabase            = 1 << 1,
  118.     kQ3FileModeText                = 1 << 2
  119. };
  120. typedef enum TQ3FileModeMasks TQ3FileModeMasks;
  121.  
  122. typedef unsigned long                     TQ3FileMode;
  123. /******************************************************************************
  124.  **                                                                              **
  125.  **                                    Method Types                             **
  126.  **                                                                              **
  127.  *****************************************************************************/
  128. /*
  129.  *    IO Methods
  130.  *
  131.  *    The IO system treats all objects as groups of typed information.
  132.  *    When you register your element or attribute, the "elementType" is the 
  133.  *    binary type of your object, the "elementName" the ascii type.
  134.  *    
  135.  *    All objects in the metafile are made up of a "root" or parent object which
  136.  *    defines the instantiated object type. You may define the format of your 
  137.  *    data any way you wish as long as you use the primitives types above and the
  138.  *    routines below.
  139.  *
  140.  *    Root Objects are often appended with additional child objects, called 
  141.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  142.  *    
  143.  *    Writing is straightforward: an object traverses itself any other objects 
  144.  *    that make it up, then writes its own data. Writing uses two methods: 
  145.  *    TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
  146.  *
  147.  *    The TQ3XObjectTraverseMethod method should:
  148.  *    + First, Determine if the data should be written 
  149.  *        - if you don't want to write out your object after examining your
  150.  *            data, return kQ3Success in your Traverse method without calling
  151.  *            any other submit calls.
  152.  *     + Next, calculate the size of your object on disk
  153.  *     + Gather whatever state from the view you need to preserve
  154.  *         - you may access the view state NOW, as the state of the
  155.  *             view duing your TQ3XObjectWriteMethod will not be valid. You may
  156.  *             pass a temporary buffer to your write method.
  157.  *     + Submit your view write data using Q3View_SubmitWriteData
  158.  *         - note that you MUST call this before any other "_Submit" call.
  159.  *         - you may pass in a "deleteMethod" for your data. This method
  160.  *             will be called whether or not your write method succeeds or fails.
  161.  *     + Submit your subobjects to the view
  162.  *     
  163.  *     The TQ3XObjectWriteMethod method should:
  164.  *     + Write your data format to the file using the primitives routines below.
  165.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  166.  *             method will be called upon exit of your write method.
  167.  *
  168.  *    Reading is less straightforward because your root object and
  169.  *    any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
  170.  *    is an implicit state contained in the file while reading, which you must 
  171.  *    be aware of. When you first enter the read method, you must physically 
  172.  *    read in your data format using the primitives routines until
  173.  *    
  174.  *    Q3File_IsEndOfData(file) == kQ3True
  175.  *    
  176.  *    Generally, your data format should be self-descriptive such that you do not
  177.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  178.  *    However, this call is useful for determining zero-sized object or 
  179.  *    determining the end of an object's data.
  180.  *    
  181.  *    Once you have read in all the data, you may collect subobjects. A metafile
  182.  *    object ONLY has subobjects if it is in a container. The call
  183.  *    
  184.  *    Q3File_IsEndOfContainer(file)
  185.  *    
  186.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  187.  *    exist.
  188.  *    
  189.  *    At this point, you may use
  190.  *    
  191.  *    Q3File_GetNextObjectType
  192.  *    Q3File_IsNextObjectOfType
  193.  *    Q3File_ReadObject
  194.  *    Q3File_SkipObject
  195.  *    
  196.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  197.  *    is kQ3True.
  198.  * 
  199.  */
  200.  
  201. /*
  202.  * IO Methods
  203.  */
  204.  
  205. enum {
  206.     kQ3XMethodTypeObjectFileVersion = FOUR_CHAR_CODE('vers'),    /* version */
  207.     kQ3XMethodTypeObjectTraverse = FOUR_CHAR_CODE('trvs'),        /* byte count */
  208.     kQ3XMethodTypeObjectTraverseData = FOUR_CHAR_CODE('trvd'),    /* byte count */
  209.     kQ3XMethodTypeObjectWrite    = FOUR_CHAR_CODE('writ'),        /* Dump info to file */
  210.     kQ3XMethodTypeObjectReadData = FOUR_CHAR_CODE('rddt'),        /* Read info from file into buffer or, attach read data to parent */
  211.     kQ3XMethodTypeObjectRead    = FOUR_CHAR_CODE('read'),
  212.     kQ3XMethodTypeObjectAttach    = FOUR_CHAR_CODE('attc')
  213. };
  214.  
  215. /*
  216.  *    TQ3XObjectTraverseMethod
  217.  *
  218.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  219.  *    object. Sorry, custom objects will be available in the next major revision.
  220.  *
  221.  *    The "data" is a pointer to your internal element data.
  222.  *
  223.  *    The view is the current traversal view.
  224.  */
  225. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  226. /*
  227.  *  TQ3XObjectTraverseDataMethod
  228.  */
  229. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseDataMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  230. /*
  231.  *  TQ3XObjectWriteMethod
  232.  */
  233. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectWriteMethod )(const void *object, TQ3FileObject theFile);
  234. /*
  235.  *  Custom object writing 
  236.  */
  237. typedef CALLBACK_API_C( void , TQ3XDataDeleteMethod )(void *data);
  238. EXTERN_API_C( TQ3Status )
  239. Q3XView_SubmitWriteData            (TQ3ViewObject             view,
  240.                                  TQ3Size                 size,
  241.                                  void *                    data,
  242.                                  TQ3XDataDeleteMethod     deleteData);
  243.  
  244. EXTERN_API_C( TQ3Status )
  245. Q3XView_SubmitSubObjectData        (TQ3ViewObject             view,
  246.                                  TQ3XObjectClass         objectClass,
  247.                                  unsigned long             size,
  248.                                  void *                    data,
  249.                                  TQ3XDataDeleteMethod     deleteData);
  250.  
  251. /*
  252.  *  TQ3XObjectReadMethod
  253.  */
  254. typedef CALLBACK_API_C( TQ3Object , TQ3XObjectReadMethod )(TQ3FileObject theFile);
  255. /*
  256.  *    TQ3XObjectReadDataMethod
  257.  *
  258.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  259.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  260.  *
  261.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  262.  */
  263. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile);
  264. /*
  265.  *  TQ3XObjectAttachMethod
  266.  */
  267. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectAttachMethod )(TQ3Object childObject, TQ3Object parentObject);
  268.  
  269.  
  270. /******************************************************************************
  271.  **                                                                              **
  272.  **                                Versioning                                     **
  273.  **                                                                              **
  274.  *****************************************************************************/
  275.  
  276. #define Q3FileVersion(majorVersion, minorVersion)    (TQ3FileVersion) \
  277.     ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF))
  278.  
  279. typedef unsigned long                     TQ3FileVersion;
  280. #define kQ3FileVersionCurrent    Q3FileVersion(1,5)
  281.  
  282. /******************************************************************************
  283.  **                                                                              **
  284.  **                                File Routines                                 **
  285.  **                                                                              **
  286.  *****************************************************************************/
  287. /*
  288.  * Creation and accessors
  289.  */
  290. EXTERN_API_C( TQ3FileObject )
  291. Q3File_New                        (void);
  292.  
  293. EXTERN_API_C( TQ3Status )
  294. Q3File_GetStorage                (TQ3FileObject             theFile,
  295.                                  TQ3StorageObject *        storage);
  296.  
  297. EXTERN_API_C( TQ3Status )
  298. Q3File_SetStorage                (TQ3FileObject             theFile,
  299.                                  TQ3StorageObject         storage);
  300.  
  301. /*
  302.  * Opening, and accessing "open" state, closing/cancelling
  303.  */
  304. EXTERN_API_C( TQ3Status )
  305. Q3File_OpenRead                    (TQ3FileObject             theFile,
  306.                                  TQ3FileMode *            mode);
  307.  
  308. EXTERN_API_C( TQ3Status )
  309. Q3File_OpenWrite                (TQ3FileObject             theFile,
  310.                                  TQ3FileMode             mode);
  311.  
  312. EXTERN_API_C( TQ3Status )
  313. Q3File_IsOpen                    (TQ3FileObject             theFile,
  314.                                  TQ3Boolean *            isOpen);
  315.  
  316. EXTERN_API_C( TQ3Status )
  317. Q3File_GetMode                    (TQ3FileObject             theFile,
  318.                                  TQ3FileMode *            mode);
  319.  
  320. EXTERN_API_C( TQ3Status )
  321. Q3File_GetVersion                (TQ3FileObject             theFile,
  322.                                  TQ3FileVersion *        version);
  323.  
  324. EXTERN_API_C( TQ3Status )
  325. Q3File_Close                    (TQ3FileObject             theFile);
  326.  
  327. EXTERN_API_C( TQ3Status )
  328. Q3File_Cancel                    (TQ3FileObject             theFile);
  329.  
  330. /*
  331.  * Writing (Application)
  332.  */
  333. EXTERN_API_C( TQ3Status )
  334. Q3View_StartWriting                (TQ3ViewObject             view,
  335.                                  TQ3FileObject             theFile);
  336.  
  337. EXTERN_API_C( TQ3ViewStatus )
  338. Q3View_EndWriting                (TQ3ViewObject             view);
  339.  
  340. /*
  341.  * Reading (Application)
  342.  */
  343. EXTERN_API_C( TQ3ObjectType )
  344. Q3File_GetNextObjectType        (TQ3FileObject             theFile);
  345.  
  346. EXTERN_API_C( TQ3Boolean )
  347. Q3File_IsNextObjectOfType        (TQ3FileObject             theFile,
  348.                                  TQ3ObjectType             ofType);
  349.  
  350. EXTERN_API_C( TQ3Object )
  351. Q3File_ReadObject                (TQ3FileObject             theFile);
  352.  
  353. EXTERN_API_C( TQ3Status )
  354. Q3File_SkipObject                (TQ3FileObject             theFile);
  355.  
  356. EXTERN_API_C( TQ3Boolean )
  357. Q3File_IsEndOfData                (TQ3FileObject             theFile);
  358.  
  359. EXTERN_API_C( TQ3Boolean )
  360. Q3File_IsEndOfContainer            (TQ3FileObject             theFile,
  361.                                  TQ3Object                 rootObject);
  362.  
  363. EXTERN_API_C( TQ3Boolean )
  364. Q3File_IsEndOfFile                (TQ3FileObject             theFile);
  365.  
  366. /*    
  367.  *  External file references
  368.  */
  369. EXTERN_API_C( TQ3Status )
  370. Q3File_MarkAsExternalReference    (TQ3FileObject             theFile,
  371.                                  TQ3SharedObject         sharedObject);
  372.  
  373. EXTERN_API_C( TQ3GroupObject )
  374. Q3File_GetExternalReferences    (TQ3FileObject             theFile);
  375.  
  376. /*    
  377.  *  Tracking editing in read-in objects with custom elements
  378.  */
  379. EXTERN_API_C( TQ3Status )
  380. Q3Shared_ClearEditTracking        (TQ3SharedObject         sharedObject);
  381.  
  382. EXTERN_API_C( TQ3Boolean )
  383. Q3Shared_GetEditTrackingState    (TQ3SharedObject         sharedObject);
  384.  
  385. /*    
  386.  *  Reading objects inside a group one-by-one
  387.  */
  388.  
  389. enum TQ3FileReadGroupStateMasks {
  390.     kQ3FileReadWholeGroup        = 0,
  391.     kQ3FileReadObjectsInGroup    = 1 << 0,
  392.     kQ3FileCurrentlyInsideGroup    = 1 << 1
  393. };
  394. typedef enum TQ3FileReadGroupStateMasks TQ3FileReadGroupStateMasks;
  395.  
  396. typedef unsigned long                     TQ3FileReadGroupState;
  397. EXTERN_API_C( TQ3Status )
  398. Q3File_SetReadInGroup            (TQ3FileObject             theFile,
  399.                                  TQ3FileReadGroupState     readGroupState);
  400.  
  401. EXTERN_API_C( TQ3Status )
  402. Q3File_GetReadInGroup            (TQ3FileObject             theFile,
  403.                                  TQ3FileReadGroupState * readGroupState);
  404.  
  405.  
  406. /*
  407.  * Idling
  408.  */
  409. typedef CALLBACK_API_C( TQ3Status , TQ3FileIdleMethod )(TQ3FileObject theFile, const void *idlerData);
  410. EXTERN_API_C( TQ3Status )
  411. Q3File_SetIdleMethod            (TQ3FileObject             theFile,
  412.                                  TQ3FileIdleMethod         idle,
  413.                                  const void *            idleData);
  414.  
  415.  
  416. /******************************************************************************
  417.  **                                                                              **
  418.  **                                Primitives Routines                             **
  419.  **                                                                              **
  420.  *****************************************************************************/
  421. EXTERN_API_C( TQ3Status )
  422. Q3NewLine_Write                    (TQ3FileObject             theFile);
  423.  
  424. EXTERN_API_C( TQ3Status )
  425. Q3Uns8_Read                        (TQ3Uns8 *                data,
  426.                                  TQ3FileObject             theFile);
  427.  
  428. EXTERN_API_C( TQ3Status )
  429. Q3Uns8_Write                    (TQ3Uns8                 data,
  430.                                  TQ3FileObject             theFile);
  431.  
  432. EXTERN_API_C( TQ3Status )
  433. Q3Uns16_Read                    (TQ3Uns16 *                data,
  434.                                  TQ3FileObject             theFile);
  435.  
  436. EXTERN_API_C( TQ3Status )
  437. Q3Uns16_Write                    (TQ3Uns16                 data,
  438.                                  TQ3FileObject             theFile);
  439.  
  440. EXTERN_API_C( TQ3Status )
  441. Q3Uns32_Read                    (TQ3Uns32 *                data,
  442.                                  TQ3FileObject             theFile);
  443.  
  444. EXTERN_API_C( TQ3Status )
  445. Q3Uns32_Write                    (TQ3Uns32                 data,
  446.                                  TQ3FileObject             theFile);
  447.  
  448. EXTERN_API_C( TQ3Status )
  449. Q3Int8_Read                        (TQ3Int8 *                data,
  450.                                  TQ3FileObject             theFile);
  451.  
  452. EXTERN_API_C( TQ3Status )
  453. Q3Int8_Write                    (TQ3Int8                 data,
  454.                                  TQ3FileObject             theFile);
  455.  
  456. EXTERN_API_C( TQ3Status )
  457. Q3Int16_Read                    (TQ3Int16 *                data,
  458.                                  TQ3FileObject             theFile);
  459.  
  460. EXTERN_API_C( TQ3Status )
  461. Q3Int16_Write                    (TQ3Int16                 data,
  462.                                  TQ3FileObject             theFile);
  463.  
  464. EXTERN_API_C( TQ3Status )
  465. Q3Int32_Read                    (TQ3Int32 *                data,
  466.                                  TQ3FileObject             theFile);
  467.  
  468. EXTERN_API_C( TQ3Status )
  469. Q3Int32_Write                    (TQ3Int32                 data,
  470.                                  TQ3FileObject             theFile);
  471.  
  472. EXTERN_API_C( TQ3Status )
  473. Q3Uns64_Read                    (TQ3Uns64 *                data,
  474.                                  TQ3FileObject             theFile);
  475.  
  476. EXTERN_API_C( TQ3Status )
  477. Q3Uns64_Write                    (TQ3Uns64                 data,
  478.                                  TQ3FileObject             theFile);
  479.  
  480. EXTERN_API_C( TQ3Status )
  481. Q3Int64_Read                    (TQ3Int64 *                data,
  482.                                  TQ3FileObject             theFile);
  483.  
  484. EXTERN_API_C( TQ3Status )
  485. Q3Int64_Write                    (TQ3Int64                 data,
  486.                                  TQ3FileObject             theFile);
  487.  
  488. EXTERN_API_C( TQ3Status )
  489. Q3Float32_Read                    (TQ3Float32 *            data,
  490.                                  TQ3FileObject             theFile);
  491.  
  492. EXTERN_API_C( TQ3Status )
  493. Q3Float32_Write                    (TQ3Float32             data,
  494.                                  TQ3FileObject             theFile);
  495.  
  496. EXTERN_API_C( TQ3Status )
  497. Q3Float64_Read                    (TQ3Float64 *            data,
  498.                                  TQ3FileObject             theFile);
  499.  
  500. EXTERN_API_C( TQ3Status )
  501. Q3Float64_Write                    (TQ3Float64             data,
  502.                                  TQ3FileObject             theFile);
  503.  
  504. EXTERN_API_C( TQ3Size )
  505. Q3Size_Pad                        (TQ3Size                 size);
  506.  
  507. /*
  508.  * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  509.  */
  510. EXTERN_API_C( TQ3Status )
  511. Q3String_Read                    (char *                    data,
  512.                                  unsigned long *        length,
  513.                                  TQ3FileObject             theFile);
  514.  
  515. EXTERN_API_C( TQ3Status )
  516. Q3String_Write                    (const char *            data,
  517.                                  TQ3FileObject             theFile);
  518.  
  519. /* 
  520.  * This call will read Q3Size_Pad(size) bytes,
  521.  *    but only place size bytes into data.
  522.  */
  523. EXTERN_API_C( TQ3Status )
  524. Q3RawData_Read                    (unsigned char *        data,
  525.                                  unsigned long             size,
  526.                                  TQ3FileObject             theFile);
  527.  
  528. /* 
  529.  * This call will write Q3Size_Pad(size) bytes,
  530.  *    adding 0's to pad to the nearest 4 byte boundary.
  531.  */
  532. EXTERN_API_C( TQ3Status )
  533. Q3RawData_Write                    (const unsigned char *    data,
  534.                                  unsigned long             size,
  535.                                  TQ3FileObject             theFile);
  536.  
  537. /******************************************************************************
  538.  **                                                                              **
  539.  **                        Convenient Primitives Routines                         **
  540.  **                                                                              **
  541.  *****************************************************************************/
  542. EXTERN_API_C( TQ3Status )
  543. Q3Point2D_Read                    (TQ3Point2D *            point2D,
  544.                                  TQ3FileObject             theFile);
  545.  
  546. EXTERN_API_C( TQ3Status )
  547. Q3Point2D_Write                    (const TQ3Point2D *        point2D,
  548.                                  TQ3FileObject             theFile);
  549.  
  550. EXTERN_API_C( TQ3Status )
  551. Q3Point3D_Read                    (TQ3Point3D *            point3D,
  552.                                  TQ3FileObject             theFile);
  553.  
  554. EXTERN_API_C( TQ3Status )
  555. Q3Point3D_Write                    (const TQ3Point3D *        point3D,
  556.                                  TQ3FileObject             theFile);
  557.  
  558. EXTERN_API_C( TQ3Status )
  559. Q3RationalPoint3D_Read            (TQ3RationalPoint3D *    point3D,
  560.                                  TQ3FileObject             theFile);
  561.  
  562. EXTERN_API_C( TQ3Status )
  563. Q3RationalPoint3D_Write            (const TQ3RationalPoint3D * point3D,
  564.                                  TQ3FileObject             theFile);
  565.  
  566. EXTERN_API_C( TQ3Status )
  567. Q3RationalPoint4D_Read            (TQ3RationalPoint4D *    point4D,
  568.                                  TQ3FileObject             theFile);
  569.  
  570. EXTERN_API_C( TQ3Status )
  571. Q3RationalPoint4D_Write            (const TQ3RationalPoint4D * point4D,
  572.                                  TQ3FileObject             theFile);
  573.  
  574. EXTERN_API_C( TQ3Status )
  575. Q3Vector2D_Read                    (TQ3Vector2D *            vector2D,
  576.                                  TQ3FileObject             theFile);
  577.  
  578. EXTERN_API_C( TQ3Status )
  579. Q3Vector2D_Write                (const TQ3Vector2D *    vector2D,
  580.                                  TQ3FileObject             theFile);
  581.  
  582. EXTERN_API_C( TQ3Status )
  583. Q3Vector3D_Read                    (TQ3Vector3D *            vector3D,
  584.                                  TQ3FileObject             theFile);
  585.  
  586. EXTERN_API_C( TQ3Status )
  587. Q3Vector3D_Write                (const TQ3Vector3D *    vector3D,
  588.                                  TQ3FileObject             theFile);
  589.  
  590. EXTERN_API_C( TQ3Status )
  591. Q3Matrix4x4_Read                (TQ3Matrix4x4 *            matrix4x4,
  592.                                  TQ3FileObject             theFile);
  593.  
  594. EXTERN_API_C( TQ3Status )
  595. Q3Matrix4x4_Write                (const TQ3Matrix4x4 *    matrix4x4,
  596.                                  TQ3FileObject             theFile);
  597.  
  598. EXTERN_API_C( TQ3Status )
  599. Q3Tangent2D_Read                (TQ3Tangent2D *            tangent2D,
  600.                                  TQ3FileObject             theFile);
  601.  
  602. EXTERN_API_C( TQ3Status )
  603. Q3Tangent2D_Write                (const TQ3Tangent2D *    tangent2D,
  604.                                  TQ3FileObject             theFile);
  605.  
  606. EXTERN_API_C( TQ3Status )
  607. Q3Tangent3D_Read                (TQ3Tangent3D *            tangent3D,
  608.                                  TQ3FileObject             theFile);
  609.  
  610. EXTERN_API_C( TQ3Status )
  611. Q3Tangent3D_Write                (const TQ3Tangent3D *    tangent3D,
  612.                                  TQ3FileObject             theFile);
  613.  
  614. /*    This call affects only text Files - it is a no-op in binary files */
  615. EXTERN_API_C( TQ3Status )
  616. Q3Comment_Write                    (char *                    comment,
  617.                                  TQ3FileObject             theFile);
  618.  
  619. /******************************************************************************
  620.  **                                                                              **
  621.  **                                Unknown Object                                 **
  622.  **                                                                              **
  623.  **        Unknown objects are generated when reading files which contain         **
  624.  **        custom data which has not been registered in the current             **
  625.  **        instantiation of QuickDraw 3D.                                         **
  626.  **                                                                              **
  627.  *****************************************************************************/
  628. EXTERN_API_C( TQ3ObjectType )
  629. Q3Unknown_GetType                (TQ3UnknownObject         unknownObject);
  630.  
  631. EXTERN_API_C( TQ3Status )
  632. Q3Unknown_GetDirtyState            (TQ3UnknownObject         unknownObject,
  633.                                  TQ3Boolean *            isDirty);
  634.  
  635. EXTERN_API_C( TQ3Status )
  636. Q3Unknown_SetDirtyState            (TQ3UnknownObject         unknownObject,
  637.                                  TQ3Boolean             isDirty);
  638.  
  639.  
  640. /******************************************************************************
  641.  **                                                                              **
  642.  **                            Unknown Text Routines                             **
  643.  **                                                                              **
  644.  *****************************************************************************/
  645.  
  646. struct TQ3UnknownTextData {
  647.     char *                            objectName;                    /* '\0' terminated */
  648.     char *                            contents;                    /* '\0' terminated */
  649. };
  650. typedef struct TQ3UnknownTextData        TQ3UnknownTextData;
  651. EXTERN_API_C( TQ3Status )
  652. Q3UnknownText_GetData            (TQ3UnknownObject         unknownObject,
  653.                                  TQ3UnknownTextData *    unknownTextData);
  654.  
  655. EXTERN_API_C( TQ3Status )
  656. Q3UnknownText_EmptyData            (TQ3UnknownTextData *    unknownTextData);
  657.  
  658.  
  659. /******************************************************************************
  660.  **                                                                              **
  661.  **                            Unknown Binary Routines                             **
  662.  **                                                                              **
  663.  *****************************************************************************/
  664.  
  665. struct TQ3UnknownBinaryData {
  666.     TQ3ObjectType                     objectType;
  667.     unsigned long                     size;
  668.     TQ3Endian                         byteOrder;
  669.     char *                            contents;
  670. };
  671. typedef struct TQ3UnknownBinaryData        TQ3UnknownBinaryData;
  672. EXTERN_API_C( TQ3Status )
  673. Q3UnknownBinary_GetData            (TQ3UnknownObject         unknownObject,
  674.                                  TQ3UnknownBinaryData *    unknownBinaryData);
  675.  
  676. EXTERN_API_C( TQ3Status )
  677. Q3UnknownBinary_EmptyData        (TQ3UnknownBinaryData *    unknownBinaryData);
  678.  
  679.  
  680. EXTERN_API_C( TQ3Status )
  681. Q3UnknownBinary_GetTypeString    (TQ3UnknownObject         unknownObject,
  682.                                  char **                typeString);
  683.  
  684. EXTERN_API_C( TQ3Status )
  685. Q3UnknownBinary_EmptyTypeString    (char **                typeString);
  686.  
  687. /******************************************************************************
  688.  **                                                                              **
  689.  **                            ViewHints routines                                 **
  690.  **                                                                              **
  691.  **        ViewHints are an object in a metafile to give you some hints on how     **
  692.  **        to render a scene.    You may create a view with any of the objects     **
  693.  **        retrieved from it, or you can just throw it away.                     **
  694.  **                                                                              **
  695.  **        To write a view hints to a file, create a view hints object from a     **
  696.  **        view and write the view hints.                                         **
  697.  **                                                                              **
  698.  *****************************************************************************/
  699. EXTERN_API_C( TQ3ViewHintsObject )
  700. Q3ViewHints_New                    (TQ3ViewObject             view);
  701.  
  702. EXTERN_API_C( TQ3Status )
  703. Q3ViewHints_SetRenderer            (TQ3ViewHintsObject     viewHints,
  704.                                  TQ3RendererObject         renderer);
  705.  
  706. EXTERN_API_C( TQ3Status )
  707. Q3ViewHints_GetRenderer            (TQ3ViewHintsObject     viewHints,
  708.                                  TQ3RendererObject *    renderer);
  709.  
  710. EXTERN_API_C( TQ3Status )
  711. Q3ViewHints_SetCamera            (TQ3ViewHintsObject     viewHints,
  712.                                  TQ3CameraObject         camera);
  713.  
  714. EXTERN_API_C( TQ3Status )
  715. Q3ViewHints_GetCamera            (TQ3ViewHintsObject     viewHints,
  716.                                  TQ3CameraObject *        camera);
  717.  
  718. EXTERN_API_C( TQ3Status )
  719. Q3ViewHints_SetLightGroup        (TQ3ViewHintsObject     viewHints,
  720.                                  TQ3GroupObject         lightGroup);
  721.  
  722. EXTERN_API_C( TQ3Status )
  723. Q3ViewHints_GetLightGroup        (TQ3ViewHintsObject     viewHints,
  724.                                  TQ3GroupObject *        lightGroup);
  725.  
  726. EXTERN_API_C( TQ3Status )
  727. Q3ViewHints_SetAttributeSet        (TQ3ViewHintsObject     viewHints,
  728.                                  TQ3AttributeSet         attributeSet);
  729.  
  730. EXTERN_API_C( TQ3Status )
  731. Q3ViewHints_GetAttributeSet        (TQ3ViewHintsObject     viewHints,
  732.                                  TQ3AttributeSet *        attributeSet);
  733.  
  734. EXTERN_API_C( TQ3Status )
  735. Q3ViewHints_SetDimensionsState    (TQ3ViewHintsObject     viewHints,
  736.                                  TQ3Boolean             isValid);
  737.  
  738. EXTERN_API_C( TQ3Status )
  739. Q3ViewHints_GetDimensionsState    (TQ3ViewHintsObject     viewHints,
  740.                                  TQ3Boolean *            isValid);
  741.  
  742. EXTERN_API_C( TQ3Status )
  743. Q3ViewHints_SetDimensions        (TQ3ViewHintsObject     viewHints,
  744.                                  unsigned long             width,
  745.                                  unsigned long             height);
  746.  
  747. EXTERN_API_C( TQ3Status )
  748. Q3ViewHints_GetDimensions        (TQ3ViewHintsObject     viewHints,
  749.                                  unsigned long *        width,
  750.                                  unsigned long *        height);
  751.  
  752. EXTERN_API_C( TQ3Status )
  753. Q3ViewHints_SetMaskState        (TQ3ViewHintsObject     viewHints,
  754.                                  TQ3Boolean             isValid);
  755.  
  756. EXTERN_API_C( TQ3Status )
  757. Q3ViewHints_GetMaskState        (TQ3ViewHintsObject     viewHints,
  758.                                  TQ3Boolean *            isValid);
  759.  
  760. EXTERN_API_C( TQ3Status )
  761. Q3ViewHints_SetMask                (TQ3ViewHintsObject     viewHints,
  762.                                  const TQ3Bitmap *        mask);
  763.  
  764. EXTERN_API_C( TQ3Status )
  765. Q3ViewHints_GetMask                (TQ3ViewHintsObject     viewHints,
  766.                                  TQ3Bitmap *            mask);
  767.  
  768. /* Call Q3Bitmap_Empty when done with the mask    */
  769. EXTERN_API_C( TQ3Status )
  770. Q3ViewHints_SetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  771.                                  TQ3DrawContextClearImageMethod  clearMethod);
  772.  
  773. EXTERN_API_C( TQ3Status )
  774. Q3ViewHints_GetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  775.                                  TQ3DrawContextClearImageMethod * clearMethod);
  776.  
  777. EXTERN_API_C( TQ3Status )
  778. Q3ViewHints_SetClearImageColor    (TQ3ViewHintsObject     viewHints,
  779.                                  const TQ3ColorARGB *    color);
  780.  
  781. EXTERN_API_C( TQ3Status )
  782. Q3ViewHints_GetClearImageColor    (TQ3ViewHintsObject     viewHints,
  783.                                  TQ3ColorARGB *            color);
  784.  
  785.  
  786.  
  787.  
  788. #if PRAGMA_ENUM_ALWAYSINT
  789.     #pragma enumsalwaysint reset
  790. #elif PRAGMA_ENUM_OPTIONS
  791.     #pragma option enum=reset
  792. #elif defined(PRAGMA_ENUM_PACK__QD3DIO__)
  793.     #pragma options(pack_enums)
  794. #endif
  795.  
  796. #if PRAGMA_STRUCT_ALIGN
  797.     #pragma options align=reset
  798. #elif PRAGMA_STRUCT_PACKPUSH
  799.     #pragma pack(pop)
  800. #elif PRAGMA_STRUCT_PACK
  801.     #pragma pack()
  802. #endif
  803.  
  804. #ifdef PRAGMA_IMPORT_OFF
  805. #pragma import off
  806. #elif PRAGMA_IMPORT
  807. #pragma import reset
  808. #endif
  809.  
  810. #ifdef __cplusplus
  811. }
  812. #endif
  813.  
  814. #endif /* __QD3DIO__ */
  815.  
  816.